home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / program / realval.lha / realval.e next >
Text File  |  1995-12-06  |  1KB  |  52 lines

  1. OPT MODULE
  2. OPT EXPORT
  3.  
  4. PROC realval(string,xrealptr:PTR TO LONG)
  5. DEF l,xwert=0,count,xneg=1,k,dezflag=FALSE,bigflag=FALSE
  6. DEF fraktcount=0,xrealold,xreal=0,endflag=FALSE
  7. xrealptr[]:=0.0
  8. k:=0;count:=0
  9. IF string[k]="-"
  10.   xneg:=-1
  11.   k++
  12. ELSEIF string[k]="+"
  13.   k++
  14. ENDIF
  15. IF ((string[k]>="0") AND (string[k]<="9")) OR (string[k]=".")
  16.   REPEAT
  17.     IF (string[k]>="0") AND (string[k]<="9")
  18.       IF Not(bigflag)
  19.         xwert:=(string[k]-"0")
  20.         xrealold:=xreal
  21.         xreal:=Mul(10,xreal)+xwert
  22.         IF xreal>=$7FFFFF         -> MaxInt does fit in 23 Bit
  23.           xreal:=xrealold
  24.           bigflag:=TRUE
  25.         ELSE
  26.           IF dezflag THEN fraktcount--
  27.         ENDIF
  28.       ELSE
  29.         IF Not(dezflag) THEN fraktcount++
  30.       ENDIF
  31.     ELSEIF string[k]="."
  32.       dezflag:=TRUE
  33.     ELSEIF (string[k]="E") OR (string[k]="e")
  34.       endflag:=TRUE
  35.       k++
  36.       IF string[k]="+" THEN k++   -> Val can't understand +
  37.       count,l:=Val(string+k)
  38.       k:=k+l
  39.       fraktcount:=fraktcount+count
  40.     ELSE
  41.       endflag:=TRUE
  42.     ENDIF
  43.     k++
  44.   UNTIL endflag
  45.   xrealptr[]:=!(xreal!)*Fpow(fraktcount!,10.0)*(xneg!)
  46.   k--
  47. ELSE
  48.   k:=0
  49. ENDIF
  50. ENDPROC k
  51.  
  52.